import pandas as pd
import shutil
import argparse as arg
import os
import re

# 配置命令行参数
ap = arg.ArgumentParser()
ap.add_argument("-e","--xlsx",required=True,help='提取目标excel文件绝对路径')
ap.add_argument("-s","--sourceDir",help='源文件所在的文件夹，如果excel中有文件的绝对路径，可以不填')
ap.add_argument("-f","--fileColumns",required=True,help='文件名所在的列，用,间隔')
ap.add_argument("-j","--judgeDetail",help='依据excel中的某一列作为判断依据')
ap.add_argument("-d","--destination",required=True,help='目标文件夹的路径')
ap.add_argument("-c","--category",default=0,help='是否根据文件名所在列细分文件夹，默认为0，即不根据文件名所在列细分，若启用细分则输入1')
args = vars(ap.parse_args())

# 读取Excel文件
excel_path = args["xlsx"]
sourse_img_dir = args["sourceDir"]
sourse_img_dir = sourse_img_dir+"\\"
df = pd.read_excel(excel_path)

# 获取文件名和眼部疾病类型
file_column = args["fileColumns"]
files = re.split(",",file_column)
type_column = args["judgeDetail"]
destination_folder = args["destination"]

# 判断是否细分
ca = int(args["category"])

# 确保目标文件夹存在
if not os.path.exists(destination_folder):
    os.makedirs(destination_folder)

# 遍历DataFrame中的每一行
for index, row in df.iterrows():
    for file in files:
        file_path = row[file]
        img_type = row[type_column]
        #判断是否存在输入参数
        if img_type is not None:
            if img_type == 0:
                continue
        if sourse_img_dir is not None:
            file_path = sourse_img_dir + file_path

        if os.path.exists(file_path):
            # 获取图片的文件名
            file_name = os.path.basename(file_path)
            if ca == 1:
                destination_folder = destination_folder+"\\"+file+"\\"
            # 构建目标文件路径
            destination_path = os.path.join(destination_folder, file_name)
            os.makedirs(destination_folder,exist_ok=True)
            # 复制文件
            shutil.copyfile(file_path, destination_path)
            print(f"Copied {file_path} to {destination_path}")
            destination_folder = args["destination"]
        else:
            print(f"File not found: {file_path}")
